8.5 将行方向转为列方向
行索引数据转成列索引数列,是指将分布在行方向展示的数据,转换到列方向来展示,可以使用df.unstack()和df.pivot两个函数完成,最后转换的结果可以是DataFrame表格,也可以是Series数据
df.stack()是指定列层级的数据转到行方向,现在是做相反的操作,unstack()函数结构如下:
df.unstack(level=1,fill_name=None)
level:指定要转换到列方向的索引层级,可以是索引或标签,如果有指定多个索引层级,则放置在列表中。
fill_name:如果转换时产能缺失值,则可以设置替换值。
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.05 将行方向转为列方向1.xlsx" , index_col = 0 )
print (df)
t=df.stack().reset_index().rename( columns ={ "level_1":"科目",0:"分数" })
print (t)
返回:
语文 | 数学 | |
---|---|---|
科目 | ||
张三 | 100 | 91 |
李四 | 86 | 95 |
王五 | 63 | 53 |
科目 | 科目 | 分数 | |
---|---|---|---|
0 | 张三 | 语文 | 100 |
1 | 张三 | 数学 | 91 |
2 | 李四 | 语文 | 86 |
3 | 李四 | 数学 | 95 |
4 | 王五 | 语文 | 63 |
5 | 王五 | 数学 | 53 |
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.05 将行方向转为列方向2.xlsx" , index_col =[ 0,1 ])
print (df)
t=df.unstack( level =[ 0,1 ]).reset_index()
print (t)
返回:
张三 | 李四 | 许流子 | 郭鬼子 | ||
---|---|---|---|---|---|
年份 | 半年 | ||||
2018年 | 上半年 | 522 | 1135 | 704 | 890 |
下半年 | 546 | 663 | 976 | 642 | |
2019年 | 上半年 | 965 | 862 | 1052 | 941 |
下半年 | 646 | 728 | 611 | 1030 |
level_0 | 年份 | 半年 | 0 | |
---|---|---|---|---|
0 | 张三 | 2018年 | 上半年 | 522 |
1 | 张三 | 2018年 | 下半年 | 546 |
2 | 张三 | 2019年 | 上半年 | 965 |
3 | 张三 | 2019年 | 下半年 | 646 |
4 | 李四 | 2018年 | 上半年 | 1135 |
5 | 李四 | 2018年 | 下半年 | 663 |
6 | 李四 | 2019年 | 上半年 | 862 |
7 | 李四 | 2019年 | 下半年 | 728 |
8 | 许流子 | 2018年 | 上半年 | 704 |
9 | 许流子 | 2018年 | 下半年 | 976 |
10 | 许流子 | 2019年 | 上半年 | 1052 |
11 | 许流子 | 2019年 | 下半年 | 611 |
12 | 郭鬼子 | 2018年 | 上半年 | 890 |
13 | 郭鬼子 | 2018年 | 下半年 | 642 |
14 | 郭鬼子 | 2019年 | 上半年 | 941 |
15 | 郭鬼子 | 2019年 | 下半年 | 1030 |
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.05 将行方向转为列方向2.xlsx" , index_col =[ 0,1 ])
print (df)
t=df.unstack( level =[ 0 ]).reset_index()
print (t)
返回:
半年 | 张三 | 李四 | 许流子 | 郭鬼子 | |||||
---|---|---|---|---|---|---|---|---|---|
年份 | 年份 | 2018年 | 2019年 | 2018年 | 2019年 | 2018年 | 2019年 | 2018年 | 2019年 |
0 | 上半年 | 522 | 965 | 1135 | 862 | 704 | 1052 | 890 | 941 |
1 | 下半年 | 546 | 646 | 663 | 728 | 976 | 611 | 642 | 1030 |